﻿using System;
// 2.参数的兼容性
// 当调用一个方法时，可以给方法的参数提供大于其指定类型的变量。这是正常的多态行为。
// 基于同样的原因，委托也可以有大于它目标方法参数类型的参数，这称为逆变。
namespace _088_委托的兼容性_参数的兼容性
{
    delegate void StringAction(string s);

    class Test
    {
        static void Main(string[] args)
        {
            StringAction sa = new StringAction(ActOnobject);
            sa("hello");

            //（和类型参数变体一样，代理变体只适用于引用转换。）
            // 委托很少替换其他人调用方法。
            //在本例种，在调用StringAction时，参数类型时string。当该参数接下来作为目标方法时，参数隐式向上转换为object。
        }
        static void ActOnobject(object o)
        {
            Console.WriteLine(o); // hello
        }
    }
}